home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / nbd.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  92 lines

  1. /*
  2.  * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
  3.  * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
  4.  *            Made nbd_end_request() use the io_request_lock
  5.  * 2001 Copyright (C) Steven Whitehouse
  6.  *            New nbd_end_request() for compatibility with new linux block
  7.  *            layer code.
  8.  * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
  9.  *            Removed unneeded blksize_bits field from nbd_device struct.
  10.  *            Cleanup PARANOIA usage & code.
  11.  * 2004/02/19 Paul Clements
  12.  *            Removed PARANOIA, plus various cleanup and comments
  13.  */
  14.  
  15. #ifndef LINUX_NBD_H
  16. #define LINUX_NBD_H
  17.  
  18. #define NBD_SET_SOCK    _IO( 0xab, 0 )
  19. #define NBD_SET_BLKSIZE    _IO( 0xab, 1 )
  20. #define NBD_SET_SIZE    _IO( 0xab, 2 )
  21. #define NBD_DO_IT    _IO( 0xab, 3 )
  22. #define NBD_CLEAR_SOCK    _IO( 0xab, 4 )
  23. #define NBD_CLEAR_QUE    _IO( 0xab, 5 )
  24. #define NBD_PRINT_DEBUG    _IO( 0xab, 6 )
  25. #define NBD_SET_SIZE_BLOCKS    _IO( 0xab, 7 )
  26. #define NBD_DISCONNECT  _IO( 0xab, 8 )
  27.  
  28. enum {
  29.     NBD_CMD_READ = 0,
  30.     NBD_CMD_WRITE = 1,
  31.     NBD_CMD_DISC = 2
  32. };
  33.  
  34. #define nbd_cmd(req) ((req)->cmd[0])
  35. #define MAX_NBD 128
  36.  
  37. /* userspace doesn't need the nbd_device structure */
  38. #ifdef __KERNEL__
  39.  
  40. /* values for flags field */
  41. #define NBD_READ_ONLY 0x0001
  42. #define NBD_WRITE_NOCHK 0x0002
  43.  
  44. struct nbd_device {
  45.     int flags;
  46.     int harderror;        /* Code of hard error            */
  47.     struct socket * sock;
  48.     struct file * file;     /* If == NULL, device is not ready, yet    */
  49.     int magic;
  50.     spinlock_t queue_lock;
  51.     struct list_head queue_head;/* Requests are added here...    */
  52.     struct semaphore tx_lock;
  53.     struct gendisk *disk;
  54.     int blksize;
  55.     u64 bytesize;
  56. };
  57.  
  58. #endif
  59.  
  60. /* These are sent over the network in the request/reply magic fields */
  61.  
  62. #define NBD_REQUEST_MAGIC 0x25609513
  63. #define NBD_REPLY_MAGIC 0x67446698
  64. /* Do *not* use magics: 0x12560953 0x96744668. */
  65.  
  66. /*
  67.  * This is the packet used for communication between client and
  68.  * server. All data are in network byte order.
  69.  */
  70. struct nbd_request {
  71.     u32 magic;
  72.     u32 type;    /* == READ || == WRITE     */
  73.     char handle[8];
  74.     u64 from;
  75.     u32 len;
  76. }
  77. #ifdef __GNUC__
  78.     __attribute__ ((packed))
  79. #endif
  80. ;
  81.  
  82. /*
  83.  * This is the reply packet that nbd-server sends back to the client after
  84.  * it has completed an I/O request (or an error occurs).
  85.  */
  86. struct nbd_reply {
  87.     u32 magic;
  88.     u32 error;        /* 0 = ok, else error    */
  89.     char handle[8];        /* handle you got from request    */
  90. };
  91. #endif
  92.